package com.fuhao.activeMQ.listener;

import com.fuhao.model.User;
import com.fuhao.service.ProductService;
import com.fuhao.utils;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import javax.jms.*;

/**
* @Description:    注解版监听器
* @Author:         RichZhang
*/

/**
 * 1.使用一个事务session，并且调用了rollback()方法；
 * 2.一个事务session，关闭之前调用了commit；
 * 3.在session中使用CLIENT_ACKNOWLEDGE签收模式，并且调用了Session.recover()方法。
 */
@Component
@EnableJms
public class QueueListenner3 {
    //当收到消息后，自动调用该方法,spring配置默认监听器，负责接收消息
    @Transactional
    @JmsListener(containerFactory="jmsListenerContainerFactory",destination = "myqueue")
    public void onMessage(Message message, Session session) throws JMSException {
        System.out.println("我是三号接收者");
        ObjectMessage objectMessage = (ObjectMessage) message;
//        try {
            User user = (User) objectMessage.getObject();
            ProductService queue = (ProductService) utils.getBean("queue");
            queue.saveUser(user);
            message.acknowledge();
           int i = 1/0;//测试事务回滚
//        } catch (JMSException e) {
//            session.rollback();
//            //session.recover();
//            e.printStackTrace();
//        }
    }
}
